/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.statehome.impldao;

import br.com.statehome.idao.IDaoPessoaFisica;
import br.com.statehome.models.PessoaFisica;
import br.com.statehome.util.UnidadePersistencia;
import java.util.List;
import javax.persistence.EntityManager;

/**
 *
 * @author Rodrigo
 */
public class ImplDaoPessoaFisica implements IDaoPessoaFisica {

    public boolean cadastrar(PessoaFisica pessoaFisica) {
        UnidadePersistencia up = new UnidadePersistencia();
        EntityManager em = up.getEm();
        em.getTransaction().begin();
        try {
            em.persist(pessoaFisica);
            em.getTransaction().commit();
            return true;
        } catch (Exception e) {
            em.getTransaction().rollback();
            return false;
        } finally {
            em.close();
        }
    }

    public boolean remover(PessoaFisica pessoaFisica) {
        UnidadePersistencia up = new UnidadePersistencia();
        EntityManager em = up.getEm();
        em.getTransaction().begin();
        try {
            em.remove(pessoaFisica);
            em.getTransaction().commit();
            return true;
        } catch (Exception e) {
            em.getTransaction().rollback();
            return false;
        } finally {
            em.close();
        }
    }

    public PessoaFisica buscar(String cpf) {
        UnidadePersistencia up = new UnidadePersistencia();
        EntityManager em = up.getEm();
        em.getTransaction().begin();
        try {
            String query = "SELECT * FROM PessoaFisica pf WHERE cpf =: cpf";
            PessoaFisica pf = (PessoaFisica) em.createQuery(query).getSingleResult();
            return pf;
        } catch (Exception e) {
            em.close();
            return null;
        }
    }

    public List<PessoaFisica> listar() {
        UnidadePersistencia up = new UnidadePersistencia();
        EntityManager em = up.getEm();
        em.getTransaction().begin();
        try {
            String query = "SELECT * FROM PessoaFisica pf ";
            List<PessoaFisica> listaPessoas = (List<PessoaFisica>) em.createQuery(query).getResultList();
            return listaPessoas;
        } catch (Exception e) {
            em.close();
            return null;
        }
    }
    //modificar na interface também

    public List<PessoaFisica> listarPorNome(String nome) {
        UnidadePersistencia up = new UnidadePersistencia();
        EntityManager em = up.getEm();
        em.getTransaction().begin();
        try {
            String query = "SELECT * FROM PessoaFisica pf WHERE cpf = %: cpf%";//corrigir isto aqui
            List<PessoaFisica> listaPessoas = (List<PessoaFisica>) em.createQuery(query).getResultList();
            return listaPessoas;
        } catch (Exception e) {
            em.close();
            return null;
        }
    }

    public boolean alterar(PessoaFisica pessoaFisica) {
        UnidadePersistencia up = new UnidadePersistencia();
        EntityManager em = up.getEm();
        em.getTransaction().begin();
        try {
            em.merge(pessoaFisica);
            em.getTransaction().commit();
            return true;
        } catch (Exception e) {
            em.getTransaction().rollback();
            return false;
        } finally {
            em.close();
        }
    }
}
